package com.ccs.demo;

import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;

public class Parser {
    private static final String INPUT_PATH="D:/doc_serach_index/docs/api";

    public void run(){
        //Parser 入口
        //1.根据以上路径 读取文件
        ArrayList<File> fileList=new ArrayList<>();
        //递归
        enumFile(INPUT_PATH,fileList);
//        System.out.println(fileList);
//        System.out.println(fileList.size());

        //2.打开文件 读取 解析 构建索引
        for(File f:fileList){
            parseHtml(f);
        }
        //3.将构建好的索引保存到指定文件中


    }

    private void parseHtml(File f) {
        //1.解析标题
        String title=parseTitle(f);
        //2.解析URL
        String url=parseUrl(f);
        //3.解析正文
        String content=parseContent(f);
        //4.

    }

    public String parseContent(File f) {
        try {
            FileReader fileReader=new FileReader(f);
            Boolean isCopy=true;
            StringBuilder content=new StringBuilder();

            while(true){
                int ret= fileReader.read();
                if(ret==-1){
                    break;
                }

                char c=(char)ret;
                if(isCopy){
                    if(c=='<'){
                        isCopy=false;
                        continue;
                    }

                    if(c=='\n' || c=='\r' ){
                        c=' ';
                    }

                    content.append(c);

                }else{
                    if(c=='>'){
                        isCopy=true;

                    }
                }

            }
            //关闭文件 反之泄露
            fileReader.close();
            return content.toString();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }


    }

    private String parseUrl(File f) {
        File file =new File("D:/doc_serach_index/docs/api/allclasses.html");
        String par1="https://docs.oracle.com/javase/8/docs/api/";
        String par2=file.getAbsolutePath().substring(INPUT_PATH.length());
        String par=par1+par2;
        return par;

    }

    private String parseTitle(File f) {
        String name=f.getName();
        return name.substring(0,name.length()-".html".length());
    }

    // 第一个表示从哪个路径
     //第二个表示递归得到的结果
    private void enumFile(String inputPath, ArrayList<File> fileList) {
        //String类型转换成File
        File rootPath=new File(inputPath);
        //listFiles操作只能看到第一级目录,还需要进行递归
        File[] file=rootPath.listFiles();
        for(File f:file){
            if(f.isDirectory()){
                enumFile(f.getAbsolutePath(),fileList);
            }else{
                fileList.add(f);
            }
        }
        System.out.println(file);
    }
//    private void enumFile(String inputPath, ArrayList<File> fileList) {
//       File rootPath=new File(inputPath);
//       File[] files=rootPath.listFiles();
//       for(File f:files){
//            if(f.isDirectory()){
//                enumFile(f.getAbsolutePath(),fileList);
//            }else{
//                if(f.getAbsolutePath().endsWith(".html")){
//                    fileList.add(f);
//                }
//
//            }
//       }
//    }
    public static void main(String[] args) {
        Parser parser=new Parser();
        parser.run();
    }


}
